/* 작성자 : Jint
 * 작성일 : 140423
 * 내용 : HashMap을 이용하여 데이터(회원)을 관리하기 위한 응용 예제 연습.
 * 		 HashMap 의 Key 값은 Data(Id, Name, Phone)의 ID값으로. (Key=ID)
 * 		 Value 값은 MapData 형식으로 저장.
 *		 HashMap<String, MapData> hm = new HashMap(); // ID 는 String 형식이므로 Key 자리에는 String.
 *		 
 *		 Main 창에서 Input, Update, List 를 InternalFrame 으로 제어할 것이기 때문에 Main 클래스에서 선언된 HashMap을 각각의 생성자에 매개변수로 넣어준다.
 *		 생성자를 넣어주고, 각각의 창이 생성될 때 Main 클래스의 HashMap을 전달받는다.  
 *
 */
package collection;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class MapMain extends JFrame {

	private JPanel contentPane;
	private JMenuBar menuBar;
	private JMenu mnFileProcess;
	private JMenuItem mntmInput;
	private JMenuItem mntmUpdate;
	private JMenuItem mntmList;
	MapInput input = null;
	MapUpdate update = null;
	MapList list = null;
	
	HashMap<String, MapData> hm = new HashMap<String, MapData>();
	
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MapMain frame = new MapMain();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public MapMain() {		
		
		
		setTitle("MapMain / Data Process");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 940, 572);
		setJMenuBar(getMenuBar_1());
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
	}
	private JMenuBar getMenuBar_1() {
		if (menuBar == null) {
			menuBar = new JMenuBar();
			menuBar.add(getMnFileProcess());
		}
		return menuBar;
	}
	private JMenu getMnFileProcess() {
		if (mnFileProcess == null) {
			mnFileProcess = new JMenu("Data Process");
			mnFileProcess.add(getMntmInput());
			mnFileProcess.add(getMntmUpdate());
			mnFileProcess.add(getMntmList());
		}
		return mnFileProcess;
	}
	private JMenuItem getMntmInput() {
		if (mntmInput == null) {
			mntmInput = new JMenuItem("Input");
			mntmInput.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {		
					if(input == null){
						input = new MapInput(hm); // hm을 갖고 Internal Frame을 생성하게 됨.
						input.setBounds(100,100,360,151);
					}
					contentPane.add(input);
					input.setVisible(true);
					
				}
			});
		}
		return mntmInput;
	}
	private JMenuItem getMntmUpdate() {
		if (mntmUpdate == null) {
			mntmUpdate = new JMenuItem("Update");
			mntmUpdate.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if(update == null){
						update = new MapUpdate(hm); 
						update.setBounds(0,151,386,175);
					}
					contentPane.add(update);
					update.setVisible(true);
				}
			});
		}
		return mntmUpdate;
	}
	private JMenuItem getMntmList() {
		if (mntmList == null) {
			mntmList = new JMenuItem("List");
			mntmList.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if(list == null){
						list = new MapList(hm);
						list.setBounds(386,0,282,442);
					}
					contentPane.add(list);
					list.setVisible(true);
				}
			});
		}
		return mntmList;
	}
}
